Ingenieurinformatik Teil 1, Wintersemester 2026/27
David Straub
x = [0, 1, 2] y = [] for wert in x: y.append(wert ** 2) print(y)
0.1 + 0.2 == 0.3
False
0
1
Beispiel: Eine Ganzzahl wird mit 8 Byte gespeichert – wie viele unterschiedliche Werte lassen sich darstellen?
8 Byte = 64 Bit → 2642^{64}264 Werte. Die Zweierpotenz ist die Antwort – niemand rechnet die 20-stellige Zahl aus.
Dezimal (Basis 10) – so lesen Sie Zahlen seit der Grundschule:
257=2⋅100+5⋅10+7⋅1257 = 2 \cdot 100 + 5 \cdot 10 + 7 \cdot 1 257=2⋅100+5⋅10+7⋅1
Binär (Basis 2) – dasselbe Prinzip, andere Stellenwerte:
11012=1⋅8+1⋅4+0⋅2+1⋅1=131101_2 = 1 \cdot 8 + 1 \cdot 4 + 0 \cdot 2 + 1 \cdot 1 = 13 11012=1⋅8+1⋅4+0⋅2+1⋅1=13
Stellenwerte von rechts: 1, 2, 4, 8, 16, 32, 64, 128, …
1100112=?110011_2 = ? 1100112=?
32+16+2+1=5132 + 16 + 2 + 1 = 51 32+16+2+1=51
Nur die Stellen mit 1 addieren – mehr ist es nicht.
45= ?245 = \;?_245=?2 – fortgesetzte Division durch 2, Reste notieren:
Reste von unten nach oben lesen: 1011012101101_21011012. Probe: 32+8+4+1=4532+8+4+1 = 4532+8+4+1=45 ✓
Rechnen Sie um – mit allen Zwischenschritten:
12310= ?2123_{10} = \;?_2 12310=?2
Und dann die Probe: rechnen Sie Ihr Ergebnis zurück ins Dezimalsystem.
9
A
F
2A16=2⋅16+10=422A_{16} = 2 \cdot 16 + 10 = 42 2A16=2⋅16+10=42
Und rückwärts: 12310=7⋅16+11→7B16123_{10} = 7 \cdot 16 + 11 \rightarrow 7B_{16}12310=7⋅16+11→7B16
AAA16= ?10AAA_{16} = \;?_{10} AAA16=?10
Zur Übersetzung der Ziffern (0–9 zählen wie im Dezimalsystem):
Vor dem Komma: 1, 2, 4, 8, … – hinter dem Komma geht es genauso weiter:
12,14,18,116,…\tfrac{1}{2}, \tfrac{1}{4}, \tfrac{1}{8}, \tfrac{1}{16}, \ldots 21,41,81,161,…
0,2510=0,0120,7510=0,1120,62510=0,10120{,}25_{10} = 0{,}01_2 \qquad 0{,}75_{10} = 0{,}11_2 \qquad 0{,}625_{10} = 0{,}101_2 0,2510=0,0120,7510=0,1120,62510=0,1012
257,2510= ?2257{,}25_{10} = \;?_2 257,2510=?2
Vorkomma 257: Division mit Rest (wie eben) → 1000000012100000001_21000000012
Nachkomma 0,25: fortgesetztes Verdoppeln, Vorkommastelle notieren:
Von oben lesen: 0,0120{,}01_20,012. Zusammen: 257,2510=100000001,012257{,}25_{10} = 100000001{,}01_2257,2510=100000001,012
Dasselbe Verfahren für 0,1100{,}1_{10}0,110:
0,110=0,00011‾2– unendlich periodisch0{,}1_{10} = 0{,}0\overline{0011}_2 \quad \text{– unendlich periodisch} 0,110=0,000112– unendlich periodisch
Der Computer speichert endlich viele Stellen – 0,1 ist im Rechner nie exakt 0,1.
ladezustand = 0.0 while ladezustand != 1.0: ladezustand = ladezustand + 0.1
Zehnmal ein fast-0,1 ergibt fast-1,0 – aber nie exakt 1,0. Die Bedingung wurde nie falsch. Deshalb hing die Schleife.
Aufschreiben, dann ausführen:
print(0.1 + 0.2 == 0.3) print(0.1 + 0.2)
Dieses Skript gibt 10029.999999999996362 aus. Erklären Sie in zwei Sätzen, warum eine „krumme“ Zahl erscheint:
10029.999999999996362
x = 100.3 summe = 0 for i in range(100): summe += x print(f"{summe:.15f}")
==
a = 0.1 + 0.2 if abs(a - 0.3) < 1e-9: print("praktisch gleich")
while ladezustand < 1.0: ladezustand = ladezustand + 0.1
< statt != – die Schleife endet, sobald 1,0 erreicht oder überschritten ist.
<
!=
Nächste Woche: Eigene Datentypen mit Klassen – und der Semesterrückblick